package com.qf.java2201.service.impl;

import com.qf.java2201.dao.OrderDao;
import com.qf.java2201.dao.UserInfoDao;
import com.qf.java2201.dao.impl.OrderDaoImpl;
import com.qf.java2201.dao.impl.UserInfoDaoImpl;
import com.qf.java2201.pojo.HOrder;
import com.qf.java2201.service.OrderService;

import java.util.Date;
import java.util.List;

/**
 * @date 2022/4/9
 * @desc
 */
public class OrderServiceImpl implements OrderService {

    OrderDao orderDao = new OrderDaoImpl();

    UserInfoDao userInfoDao = new UserInfoDaoImpl();

    @Override
    public boolean checkDate(String odate, String edid, String sjdid) {

        //查询 该医生的  最大预约人数   查询  h_userinfo
        int dnum = userInfoDao.getDnum(edid);

        // 查询 该时间段 已预约人数    查询 h_order表  ,
        // yyztid = 21 是 预约中
        // yyztid = 22 是 已付款
        // yyztid = 23 是 已取消
        // yyztid = 24 是 已完成
        // yyztid = 25 是 已作废

        int yyztid = 22;
        //已付款的预约单个数
        int payOrder = orderDao.getPayOrderCount(odate,edid,sjdid,yyztid);

        // 如果最大预约人数 大于 已预约人数  说明 还可以预约 返回true 否则 返回false
        if(dnum-payOrder>0){
            return  true;
        }

        return false;
    }

    @Override
    public int addOrder(HOrder hOrder) {

        return orderDao.addOrder(hOrder);
    }

    @Override
    public int updateOrderStatus(String oid, Integer yyztid) {
        //21-25   预约中   已付款   已取消  已完成   已作废

        return orderDao.updateOrderStatus(oid,yyztid);
    }

    @Override
    public List<HOrder> findOrderByUdid(Integer did) {
        //查询 用户的预约单
        return orderDao.findOrderByUdid(did);
    }


    /**
     * @param oid    预约单id
     * @param zt   要把预约单改为什么状态
     * @param type   预约单由什么状态 到什么状态的 标识
     * @param did   当前患者的id
     * @param odate  要更改的 预约单的日期
     * */
    @Override
    public int updateOrderByType(String oid, String zt, String type, Integer did, Date odate) {

        //预约中的取消
        if(type.equals("1")){

            return this.updateOrderStatus(oid,Integer.parseInt(zt));
        }

        //预约中付款
        if(type.equals("2")){
            return this.updateOrderStatus(oid,Integer.parseInt(zt));
        }


        // 已付款 的 完成
        if(type.equals("4")){
            return this.updateOrderStatus(oid,Integer.parseInt(zt));
        }

        // 已付款的  取消
        // 判断 是否能够取消    一天 （按照预约单日期统计的）只能取消一次  一周 只能取消2 次
        // 不是  按照取消日期统计的
        if(type.equals("3")){
            // 判断能否取消

            boolean isQx = isQxOrder(oid,did,odate);
            if(isQx){
                return this.updateOrderStatus(oid,Integer.parseInt(zt));
            }
        }

        return 0;
    }

    // 判断 预约单是否能够取消
    private boolean isQxOrder(String oid, Integer did, Date odate) {
        // 预约单当天  取消的  个数
        int dayQxcount = orderDao.countDayQxCount(oid,did,odate);
        // 该预约单 所在那一周的 取消次数
        int weekQxcount = orderDao.countWeekQxCount(oid,did,odate);

        if(dayQxcount>=1 || weekQxcount >=2){
            return false;
        }
        return true;
    }

}
